/**
 * Copyright (c) 2015, 小智科技（版权声明）
 *
 * @file	CustomServerApplication.h
 * @brief CustomServerApplication 类为　ServerApplication 的派生类 。
 *
 * ServerApplication 为　Poco的一个应用程序框架。CustomServerApplication 类继承于
 * 此类。此类现调用了initialize() , main() ,uninitialize()
 *
 * @author: 		yuhaiyang
 * @date: 		2015年5月6日
 *
 * 修订说明:初始版本
 */
#ifndef CustomServerApplication_H_
#define CustomServerApplication_H_

#include "common_cap.h"
#include "Poco/Util/Option.h"
#include "Poco/Util/OptionSet.h"
#include "Poco/Util/HelpFormatter.h"
#include "Poco/Exception.h"

///< config file path
#define DEFAULT_CONG_PATH 		"./etc/conf.json"

///<  log file config
#define DEFAULT_LOG_PATH 		"./log"
#define DEFAULT_LOG_FILE        "server.log"
#define DEFAULT_LOG_ROTATION 	"1 days"
#define DEFAULT_LOG_PURGEAGE 	"1 months"
#define DEFAULT_LOG_LEVEL		"information"

///< redis config
//#define DEFAULT_REDIS_HOST  "127.0.0.1"
//#define DEFAULT_REDIS_PORT 6379
//#define DEFAULT_REDIS_PASS ""
//#define DEFAULT_REDIS_TIME_OUT 5

/**
 *@brief 此类为路由器采集认证服务器的基础单实例类。
 * 
 * 此类提供日志接口　LOG , 配置文件接口　CONF,redis connect.
 */
class CustomServerApplication : public Poco::Util::ServerApplication
{
public:
    CustomServerApplication( );
    virtual ~CustomServerApplication( );

protected:
	/**
     * @brief 程序的初始化部分,继承于 Application 类
     * @param [in] self
	 */
	void initialize( Application& self );

	/**
     *@brief 程序的反初始化部分,继承于 Application 类
	 */
	void uninitialize( void );

	/**
	 *@brief 添加启动参数,继承于 Application 类。
	 */
	void defineOptions( Poco::Util::OptionSet& options );
	/**
	 *@brief 业务的的启动函数, 继承于 Application 类。
	 */
	int main( const ArgVec& args );

	/**
	 *@brief --help -h 的响应函数
	 *
	 *@param 模板要求,无实际意义。
	 */
    void handleHelp(const std::string&, const std::string&);

	/**
	 *@brief --version -v 的响应函数,打印程序版本。
	 *
	 *@param 模板要求,无实际意义。
	 */
	void version(  const std::string& name , const std::string& value );

	/**
	 *@brief  初始化程序的日志部分
	 */
	void initLog( void );

private:
	bool _helpRequested;						///< 是否执行过与 help 相关的指令。如果是的话，执行对应指令的函数之后退出。
};

#endif /* CustomServerApplication_H_ */



